#include <iostream>

class Test
{
public:
    Test()
    {
        std::cout<<"构造函数！\n";
    }
    Test(const Test& t)
    {
        std::cout<<"深拷贝构造函数!\n";
    }
    void operator=(const Test& t)
    {
        std::cout<<"赋值运算符重载深拷贝!\n";
    }
    ~Test()
    {
        std::cout<<"析构函数!\n";
    }
};


//RVO优化:返回值优化:返回局部对象不会发生拷贝
//返回左值：全引用
const Test& func(const Test& t1)     //形参不能优化
{
    //static Test t1;  //左值
    //Test t;  //将亡值
    return t1;
}

int main()
{
    //将亡值：马上要释放的值
    //将亡值也是右值
    // Test t = Test();//匿名对象：生命周期只有一行的临时对象
    // Test();
    Test t;
    const Test t2 = func(t);
    return 0;
}